iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
SideProject30

三十歲時在做什麼?有沒有空?可以來做遊戲嗎?系列 第 27

[Day 27] RogueLive: VTuber's Dark Odyssey 實作玩家與角色

  • 分享至 

  • xImage
  •  

實作玩家與角色

今天來實作遊戲角色

1. 設計和實現VTuber角色的基本移動和互動

功能描述:

VTuber角色可以在遊戲場景中上下左右移動。
玩家可以透過鍵盤操作VTuber角色。

首先,建立player.rs並引入必要的模組:

use bevy::prelude::*;

創建一個Player結構,代表遊戲中的玩家:

struct Player;

接著,定義玩家移動的邏輯:

fn player_movement(
    keyboard_input: Res<Input<KeyCode>>,
    mut query: Query<(&Player, &mut Transform)>
) {
    for (_player, mut transform) in query.iter_mut() {
        const MOVEMENT_SPEED: f32 = 4.0;
        if keyboard_input.pressed(KeyCode::W) {
            transform.translation.y += MOVEMENT_SPEED;
        }
        if keyboard_input.pressed(KeyCode::S) {
            transform.translation.y -= MOVEMENT_SPEED;
        }
        if keyboard_input.pressed(KeyCode::A) {
            transform.translation.x -= MOVEMENT_SPEED;
        }
        if keyboard_input.pressed(KeyCode::D) {
            transform.translation.x += MOVEMENT_SPEED;
        }
    }
}

2. 創建基礎的敵人AI和互動

功能描述:

遊戲場景中將隨機生成敵人。
敵人會根據某種算法追蹤玩家。

首先,創建一個Enemy結構:

struct Enemy;

接著,定義敵人的移動邏輯:

fn enemy_movement(
    mut query: Query<(&Enemy, &mut Transform)>,
    player_query: Query<(&Player, &Transform)>
) {
    if let Some((_player, player_transform)) = player_query.iter().next() {
        for (_enemy, mut enemy_transform) in query.iter_mut() {
            const ENEMY_SPEED: f32 = 2.0;
            let direction = (player_transform.translation - enemy_transform.translation).normalize();
            enemy_transform.translation += direction * ENEMY_SPEED;
        }
    }
}


上一篇
[Day 26] RogueLive: VTuber's Dark Odyssey 優化架構
下一篇
[Day 28] RogueLive: VTuber's Dark Odyssey 剛起步就要Debug
系列文
三十歲時在做什麼?有沒有空?可以來做遊戲嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言